
  <script>
  // arguments 所有实参的集合组成的伪数组
  function sum() {
    // 普通函数才有 arguments
    // console.log(arguments)
    // Object.prototype.toString.call()
    // “借用”数组的 reduce 方法，处理 arguments
    // return Array.prototype.reduce.call(arguments, (acc, cur) => acc + cur)
    // push 的内部再做 push 操作的时候，肯定依赖了 this
    // Array.prototype.push.call(arguments, 9, 11)
    // return Array.prototype.slice.call(arguments).reduce((acc, cur) => acc + cur)
    // return [...arguments].reduce((acc, cur) => acc + cur)
    // return Array.from(arguments).reduce((acc, cur) => acc + cur)
    // arguments
  }
  // console.log(sum(1, 3, 5, 7))

  // const ar = [1, 3, 5]
  // console.log(ar.slice())


  // 能通过索引访问元素；具有 length 属性；不具备真数组的方法
  const o = {
    0: 'a',
    1: 'b',
    length: 2
  }
  // 需求：往 o 里面加一项 'c'
  /* o[2] = 'c'
  o.length++
  console.log(o) */
  // 如果我能使用数组的 push 方法往里面直接 push 一项 'c' 改多简单呀
  
  Array.prototype.push2 = function(con) {
    // this => o
    // this.length => 2
    // con => 'c'
    this[this.length] = con
    // o[2] = 'c'
    this.length++
  }
  Array.prototype.push2.call(o, 'c')
  console.log(o)
  </script>
